home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Bavarian / Bavarian #056 (19xx)(APS Electronic).zip / Bavarian #056 (19xx)(APS Electronic).adf / Anleitung < prev    next >
Text File  |  1987-05-04  |  43KB  |  846 lines

  1. /**************************************************************************/
  2.  *                                                                        *
  3.  *       DIESES FILE IST NICHT TEIL DES ORIGINAL DBW_RENDER-PROGRAMMS     *
  4.  *                       ~~~~~                                            *
  5.  *             es wurde im September 1987 von mir hinzugefügt             *
  6.  *                   es beansprucht KEINERLEI Rechte !                    *
  7.  *                                                                        *
  8.  *        Für Details über die Rechte an DBW_Render lest bitte das        *
  9.  *               File COPYING !                                           *
  10.  *                                                                        *
  11. /**************************************************************************/
  12.  **********                                                     ***********
  13. ******       Anleitung zum Ray-Tracer DBW_RENDER von D.B.WECKER      *******
  14.  **********                                                     ***********
  15.   ************************************************************************
  16.  
  17. INHALT:
  18. ~~~~~~~
  19.    Einleitung
  20.    Weiterentwicklungen
  21.    Hintergrund-Infos
  22.    RAY
  23.    RAY2
  24.    DISPLAY
  25.    Schreiben eines .DAT-Files
  26.    Quellcode-Infos
  27.  
  28. EINLEITUNG:
  29. ~~~~~~~~~~~
  30. Wer die schon früher erschienenen Ray-Tracing Bilder mag, wird
  31. DBW_Render lieben. Dieses Paket ist eine KOMPLETTE übertragung des
  32. Ray-Tracers,den der Autor auf einer VAX benutzte, um solche Bilder zu
  33. erstellen.(it's really phantastic!!!).
  34. Er läuft auf einem Standard-Amiga mit 512k Ram (und kann, wenn nötig,
  35. für 256k umgestellt werden). Durch die Hinzufügung von AI-heuristics(??)
  36. wird die Rechenzeit in die Größenordnung einer VAX-780 gerückt (auch wenn
  37. der Amiga weder Fliesskomma-Prozessor noch virtuellen Speicher besitzt)!
  38. Ohne AI-heuristics benötigt z.B. das Bild 'glass' auf einem Amiga 50 Std.
  39. Mit den Heuristics sind es - bei voller Auflösung - nur 11 Stunden!
  40.  
  41. INHALT DES PAKETS:
  42. ~~~~~~~~~~~~~~~~~~
  43.    RAY          - Ray-Tracing Programm
  44.    RAY2         - Post-Prozesseor, um das IFF/ILBM-Format zu erzeugen
  45.    DISPLAY      - Zeigt die von RAY2 erzeugten Bilder
  46.    *.DAT        - Eingabe-Dateien (ASCII) für RAY
  47.    *.TMP        - RAY Ausgabe-Dateien
  48.    *.ILBM       - RAY2 Ausgabe-Dateien
  49.    *.c          - Alle MANX-Aztec C Quellcodes des Pakets
  50.    *.h          - Alle MANX-Aztec C Include-Dateien
  51.    COPYING      - Generelle Lizens-Bestimmungen
  52.  
  53. BITTE lest die Lizens-Bestimmungen (File 'COPYING'), bevor ihr weiterlest!
  54.  
  55. WEITERENTWICKLUNGEN:
  56. ~~~~~~~~~~~~~~~~~~~~
  57. Abhängig vom Interesse an diesem Programm, wird der Autor an folgenden
  58. Updates weiterarbeiten :
  59.  
  60.    DBW_ED3D  ein 3-dimensionaler Grafik-Editor (sodaß man die Eingaben
  61.              für RAY nicht mehr mathematisch angeben muß, sondern ein-
  62.              fach zeichnen kann.
  63.  
  64.    DBW_FILM  womit eine Filmsequenz aus HAM-Bildern möglich wird (dann
  65.              könnt ihr eure eigenen "Juggler"-ähnlichen Demos machen).
  66.  
  67.    --------  eine Version des Programms für die Verwendung mit Speicher-
  68.              erweiterung und Fliesskomma-Coprozessor.
  69.  
  70.    --------  Verbesserungen und Erweiterungen zum bestehenden Paket.
  71.  
  72. HINTERGRUND-INFORMATIONEN:
  73. ~~~~~~~~~~~~~~~~~~~~~~~~~~
  74. Das DBW_Render Paket benutzt einen sogenannten 'Distributed Ray Tracing-
  75. Alogarithmus'. Über eine ganz nette Lösung des Problems der 'versteckten
  76. Linien' hinaus, bietet Ray-Tracing (generell) die Möglichkeit für
  77. sehr realistische Schattierungs- und Beleuchtungs-Berechnungen.
  78. Dieses Programm ist in MANX-Aztec C geschrieben und läuft auf jedem
  79. Amiga. Das RAY-Programm kann Bilder erzeugen, die aus vier einfachen
  80. geometrischen Objekten aufgebaut sind: Kugeln, Parallelogramme, Dreiecke
  81. und flache Ringe. Hier einige der Besonderheiten des Programms:
  82.  
  83.   - Bestimmung korrekter Schatten, erzeugt von beliebig platzierten
  84.     Lichtquellen, geworfen von beliebig geformten Objekten auf
  85.     beliebig geformte Objekte.
  86.   - Diffuse und theoretische Reflexionen (mit beliebigem Glanz oder
  87.     Politur). Bildung von diffus reflektiertem Licht zwischen den
  88.     Objekten, was unter anderem sehr gut Farbverwischungen bei
  89.     benachbarten, kontrastreich gefärbten Objekten simuliert.
  90.   - Spiegelungen mit einstellbarer Glätte und Zustand der Oberfläche.
  91.   - Lichtbrechung und Transparenz (was mikroskopisch feine Oberflächen-
  92.     Strukturierungen - ähnlich geätztem Glas - ermöglicht).
  93.   - Zwei Arten von Lichtquellen: direktes Licht (paralelle Lichtstrahlen)
  94.     mit konstanter Intensität und kugelförmiges Licht (wie Glühbirnen,
  95.     die entsprechend einer Funktion aus Radius und Entfernung einen
  96.     Halbschatten werfen), wobei hier die Intensität mit dem umgekehrten
  97.     quadratischen Gesetz abnimmt.
  98.   - Photographische Tiefenschärfe. D.h. die virtuelle Kamera kann auf
  99.     ein bestimmtes Objekt in der Szene eingestellt werden, wobei noch
  100.     die Blende verstellt werden kann, um die Tiefenschärfe anzupassen.
  101.   - Räumliche Strukturierung. Normalerweise wird ein einzelnes Objekt
  102.     (sagen wir eine Kugel) betrachtet, als hätte sie gleichmäßige
  103.     Eigenschaften, was oft unecht wirkende Gebilde zur Folge hat.
  104.     Räumliche Strukturierung ist ein Weg, die Oberflächen-Eigenschaften
  105.     alogarithmisch zu verändern (sodaß die ganze Oberfläche nicht
  106.     mehr gleichmäßig ist), um ein Material der realen Welt darzustellen.
  107.     Bis jetzt kann das Programm Holz, Murmeln, Backsteine, schnee-
  108.     bedeckte Berge, Wasser (mit beliebigen Wellen) und einige abstrakte
  109.     Dinge wie Farbverläufe erzeugen.
  110.   - Fractals. Das Programm enthält auch, was bekannt ist als 'Rekursive
  111.     Dreiecks-Teilung' und allerlei natürlich aussehende Gebilde hervor-
  112.     bringt (z.B.Felsbrocken,Berge,etc.). Die Eigenschaften des fraktalen
  113.     Gebildes (Grad der Feinheit,Verzerrung,etc.) wird mit Parametern des
  114.     Programms eingestellt.
  115.   - AI-heuristics, um die Rechenzeit einer Szene auf eine bestimmte
  116.     Länge festlegen zu können.
  117.  
  118. Wenn das RAY-Proramm läuft, liest es eine Art Kommando-Datei ein, die
  119. eine geometrische Beschreibung der darzustellenden Szene incl. der
  120. gewünschten Beleuchtung, Kameraposition, usw. enthält. Dann rechnet das
  121. es lange Zeit und schreibt dabei jede errechnete Zeile auf Disk.
  122. Hier das Format einer solchen Zeile (im .TMP-File):
  123.  
  124.    <Zeile  Nummer>     -   2 Bytes
  125.    <Rote   Pixels>     - 160 Bytes (4 Bytes pro Pixel)
  126.    <Grüne  Pixels>     - 160 Bytes (       "         )
  127.    <Blaue  Pixels>     - 160 Bytes (       "         )
  128.  
  129. Für einen ganzen Bildschirm (400 Zeilen) ist dieses File 192.800 Bytes
  130. lang. Ein zweites Programm (RAY2) wird benötigt, um eine der drei
  131. folgenden Auflösungen für das Ausgabe-File zu generieren :
  132.  
  133.    4096 Farben (HAM-Modus) Interlaced bei 320x400 Auflösung
  134.      32 Farben             Interlaced bei 320x400     "
  135.      32 Farben                        bei 320x200     "    (DP-Format)
  136.  
  137. Alle Dateiformate entsprechen dem IFF/ILBM Standard und können mit dem
  138. mitgelieferten DISPLAY-Progamm angesehen werden.
  139. Alles in allem repräsentiert das DBW_Render-Paket über 4000 Zeilen
  140. C-Quellcode. Es basiert weitestgehend auf original Alogarithmen für
  141. die VAX von Tom Dahl und Tone Engel bei Digital Equipment Corporation.
  142. Die Übertragung auf den Amiga hat mehrere Monate gedauert.
  143.  
  144.  RAY :
  145. ~~~~~~~
  146. ZUR ERINNERUNG: BEVOR IHR IRGENDETWAS STARTET, MACHT EINE KOPIE
  147.                         DIESER ORIGINAL-DISKETTE !!!
  148.  
  149. Sobald man ein Eingabe-File hat (Beschreibung weiter unten bei "Schreiben
  150. eines .DAT-Files"), kann man den Ray-Tracer starten. Denkt aber daran,
  151. daß die Ausgabe von RAY für einen ganzen Screen 192.800 Bytes oder über
  152. 400 Blocks beträgt. Vergewissert euch also, ob noch genug Platz auf der
  153. Diskette ist. Es ist NICHT möglich die Ausgabe in die RAM-Disk umzuleiten
  154. (Guru läßt grüßen)! Außerdem müßt ihr den Stack auf mindestens 10000 her-
  155. aufsetzen (1> stack 10000).
  156. Wenn nun das Eingabe-File z.B. 'glass.dat' heisst, kann RAY mit
  157.  
  158.       1> ray glass
  159.  
  160. gestartet werden. Alle Optionen müssen im .DAT-File abgespeichert sein.
  161. Seht euch das File 'glass.dat' auf dieser Disk mal an (1> type glass.dat).
  162. Das Programm produziert beim Laufen ein Ausgabe-File Namens 'glass.tmp'.
  163. Wenn ein anderer Name für das Ausgabefile als für das Eingabefile ge-
  164. wünscht wird, kann man den Ray-Tracer auch nur mit
  165.  
  166.       1> ray
  167.  
  168. starten. Dieser fragt dann nach dem Input-File:
  169.  
  170.       Scene description file?
  171.  
  172. worauf man mit 'glass.dat' antworten kann. Das Programm fordert daraufhin
  173. den Namen des Output-Files:
  174.  
  175.       File name to save picture (.tmp)?
  176.  
  177. worauf man z.B. mit 'df1:glass.tmp' antwortet.
  178. Das Programm wird nun das Bild errechnen. Beachtet, daß IMMER vier extra
  179. Zeilen vor und nach der Szene gerechnet werden. Bei einem vollen Screen
  180. von 400 Zeilen beginnt das Programm also mit Zeile -4 und endet mit
  181. Zeile 403. Das liegt daran, daß die AI-heuristics eine ganze Zeile
  182. zwischenspeichern müssen, bevor sie sie ausgegeben können.
  183. Wenn das Programm fertig ist, gibt es einige Statistiken über das Bild
  184. aus. Am interessantesten sind dabei die 'GUESSED'(vergessenen), im Gegen-
  185. satz zu den 'COMPUTED'(gerechneten) Pixels. Dies gibt einen Hinweis auf
  186. die zu erwartende Qualität des Bildes (0=perfekt). Diese Zahlen werden
  187. von der im Kommando-File angegebenen Rechenzeit ('R') bestimmt.
  188.  
  189.  RAY2 :
  190. ~~~~~~~~
  191. Nachdem RAY seine Arbeit getan hat, kann das (oder die) Ausgabe-.TMP-File
  192. von RAY2 nachbearbeitet werden. Aus folgenden Gründen können mehrere Files
  193. angegeben werden:
  194.  
  195.    1) Falls die Maschine abstürtzt und man konnte einen Teil retten,
  196.       so kann dieser weiterverwendet werden.
  197.    2) Man kann das Bild in Streifen rechnen lassen.
  198.    3) Wenn einige Teile aufgrund zu geringer Rechenzeit verwaschen
  199.       sind, kann man sie auf diese Weise nachberechnen lassen.
  200.  
  201. Das alles wird klarer wenn wir das Beispiel mit
  202.  
  203.       1> ray2 glass
  204.  
  205. starten. Nun wird die Datei 'glass.tmp' (Ausgabe von RAY) geöffnet.Beim
  206. Lesen werden die am meisten verwendeten Farben herausgesucht, ein Custom-
  207. Screen geöffnet und das Bild gemalt .Dann werden die Daten wieder vom Bild-
  208. schirm gelesen und in eine neue Datei 'glass.ilbm' geschrieben. Wenn
  209. das Programm fertig ist, blinkt der Bildschirm kurz auf und man kann das
  210. Programm mit einem unsichtbaren Schliess-Gadget links oben beenden.
  211. Während das Programm in die Ausgabedatei schreibt, wird der erste Pixel
  212. jeder Zeile invertiert, sodaß man den Vorgang am Bildschirm verfolgen kann.
  213.  
  214. Hier ein Beispiel, bei dem alle Optionen von RAY2 verwendet werden:
  215.  
  216.       1> ray2 -c 1 -h 1 -l 1 -o glass.ilbm glass
  217.  
  218. Die Optionen sind:
  219.  
  220.       -c        = Komprimiertes Datenformat (0 oder 1) (default = ja = 1)
  221.       -h        = Hold-And-Modify Modus     (0 oder 1) (default = ja = 1)
  222.       -l        = Interlace Modus           (0 oder 1) (default = ja = 1)
  223.       -o        = Name des RAY2-Ausgabe-Files
  224.       <name>    = ein bis zu 10 Buchstaben langer Filename
  225.  
  226. Das gezeigte Beispiel wird genau das gleiche Bild ergeben, wie das vorher-
  227. gehende (weil nur die default-Werte genommen wurden). Wenn wir das ein-
  228. fachste Format (DeluxePaint) wollen und wir haben mehrere .TMP-Files,
  229. können wir schreiben:
  230.  
  231.       1> ray2 -h 0 -l 0 -o glass.pic glass1 glass2 glass
  232.  
  233. Das Programm übernimmt IMMER (wenn möglich) die Zeilen der vorangehenden
  234. Dateien. So enthält zum Beispiel die Datei 'glass.tmp' ein komplettes
  235. 12-Stunden Bild. 'glass1.tmp' und 'glass2.tmp' enthalten die Zeilen um
  236. die Lichtquellen herum, die im 'glass.tmp'-File verwaschen sind, nur mit
  237. einer Auflösung von 24 Stunden, sodaß sie wesentlich besser werden (jedes
  238. braucht etwa eine Stunde).
  239. RAY2 beinhaltet ebenfalls AI-heuristics, um die 4096 Farben in eine
  240. Palette mit 32 Farben umzurechnen (wenn der HAM-Modus abgeschaltet ist).
  241.  
  242.  DISPLAY :
  243. ~~~~~~~~~~~
  244. DISPLAY wird ganz einfach mit
  245.  
  246.       1> display glass
  247.  
  248. gestartet, worauf 'glass.ilbm' auf dem Bildschirm gezeigt wird. Man
  249. kann aber auch den ganzen Namen (z.B.'glass.pic') angeben, wenn er nicht
  250. mit '.ILBM' endet.
  251. Das Bild wird angezeigt, bis wiederum das unsichtbare linke obere Schliess-
  252. Gadget angeklickt wird. Nicht vergessen: Mit <Amiga-n> bzw. <Amiga-m> kann
  253. zwischen Workbench- und DISPLAY-Screen umgeschaltet werden.
  254.  
  255. SCHREIBEN EINES .DAT-FILES:
  256. ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  257. Okay, nun zum harten Teil: Der Inhalt des Script-Eingabe-Files (.DAT)!
  258. Die Datei ist ein Standard ASCII Text File, wobei jede Zeile ein Objekt
  259. definiert oder ein anderes Kommando für RAY darstellt. Jede Zeile beginnt
  260. mit einem - großen oder kleinen - Buchstaben, der für das jeweilige Kom-
  261. mando steht. Die Kommandos sind:
  262.  
  263.    R  - Auflösung (default =  12.0 Stunden)
  264.    N  - genereller Lichtbrechungs-Faktor (default = 1.0)
  265.    Z  - Erzeugen eines 2D-Histogramms (default = 3D)
  266.    a  - verstärktes Umgebungslicht (default = 0.0)
  267.    A  - Antialiasing (default = kein Antialiasing)
  268.    F  - Tiefenschärfe und Blende der Kamera (default = unendlich)
  269.    M  - generell diffuse Beleuchtung (default = nicht diffus)
  270.    &  - Start- und End-Zeile der Berechnung
  271.   *,! - Kommentar (wird ignoriert)
  272.    b  - Hintergrund-Farbwerte
  273.    w  - Wellenstruktur
  274.    g  - Farbverlauf
  275.    n  - Schneefall
  276.    k  - 3D-Schachbrettmuster
  277.    H  - genereller Dunst-Faktor (default = keine Vergrauung)
  278.    f  - Fractal-Struktur
  279.    m  - Murmeln-Struktur
  280.    d  - Holz-Maserung
  281.    e  - Kamera-Blickpunkt und -Richtung
  282.    l  - paralleles Licht
  283.    L  - kugelförmiges Licht
  284.    {  - Start einer Erweiterung
  285.    }  - Ende der Erweiterung
  286.    s  - Kugel          \
  287.    t  - Dreieck         \
  288.    x  - Fractal          =>   Objekte
  289.    q  - Paralellogramm  /
  290.    r  - Ring           /
  291.  
  292. Zunächst einmal bestehen alle Farbangaben aus drei Zahlen zwischen 0 und 1.
  293. Die Reihenfolge ist BLAU, GRüN, ROT.
  294. Alle Positions- und Richtungsangaben sind aus drei zueinander relativen
  295. Werten mit freier Maßeinteilung zusammengesetzt, und zwar in der Reihen-
  296. folge 'X,Y,Z'. Angenommen man schaut in negativer Z-Richtung in den
  297. Bildschirm, dann ist positiv-X nach rechts, positiv-Y nach oben und
  298. positiv-Z senkrecht aus dem Bildschirm heraus.
  299. Okay, nun zu den Eigenheiten der einzelnen Parameter. Zuerst kommen die
  300. generellen Kommandos (Strukturdefinitionen usw.), dann folgen die Kommandos,
  301. die die Objekte definieren.
  302.  
  303.  
  304.                     Genereller Lichtbrechungs-Faktor
  305.                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  306. N INDEX (0-1)
  307.     Dieser Wert wird als Index für die Lichtbrechung der Luft verwendet.
  308.  
  309.  
  310.                               Auflösung
  311.                               ~~~~~~~~~
  312. R AUFLÖSUNG (1.0-30.0)
  313.     Die Auflösung bestimmt die MAXIMALE Rechenzeit für einen 400-Zeilen-
  314.     Bildschirm. Sie wird in Stunden angegeben und sollte zwischen 1.0 und
  315.     30.0 liegen. Je mehr Zeit das Programm bekommt, desto besser wird
  316.     natürlich auch das Bild.
  317.  
  318.  
  319.                     Erzeugung eines 2D-Histogramms
  320.                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  321. Z FLAG (0/1)
  322.     Normalerweise entspricht der Inhalt eines .TMP-Files, das RAY
  323.     produziert einer binären Pixel-Version der Szene. Wie auch immer,
  324.     um die Berechnung einer Szene mit Antialiasing zu beschleunigen,
  325.     kann man in der Kommando-Datei den Befehl 'Z 1' angeben. Dann wird
  326.     das Bild als eine Art 2D-Histogramm in Graustufen im .TMP-File
  327.     abgelegt (je heller, desto mehr Rechenschritte werden für einen
  328.     Pixel benötigt). Dieser Befehl ist aber nur sinnvoll, wenn der
  329.     Antialiasing-Wert 'A' nicht auf default (1 1.0) steht. Wenn doch,
  330.     wird grundsätzlich die gleiche Zeit für jeden Pixel aufgewendet, und
  331.     das Z-Kommando führt zu einer einheitlich grauen Fläche. Der A-Befehl
  332.     aber sagt dem Ray-Tracer, daß er sich auf bestimmte Details konzen-
  333.     trieren soll,um dadurch ein Aliasing-freies Bild zu erzeugen. Mit
  334.     dem Z-Kommando kann man nun die besonders rechenintensiven Bereiche
  335.     (wo der Ray-Tracer Kanten glättet) sichtbar machen.
  336.  
  337.  
  338.                       Verstärktes Umgebungslicht
  339.                       ~~~~~~~~~~~~~~~~~~~~~~~~~~
  340. a FAKTOR (0.0-1.0)
  341.     Wie weiter unten beschrieben, enthält jedes Objekt einer Szene Para-
  342.     meter, die kontrollieren, wie hell das Objekt erscheint, wenn kein
  343.     Licht darauf fällt. Man kann also ein Objekt im Schatten heller
  344.     darstellen, als ein anderes. Alternativ kann man einen FAKTOR von
  345.     0 bis 1 angeben und das Umgebungslicht wird als Bruchteil seiner
  346.     diffusen Helligkeit dargestellt. Wenn dieser Parameter angegeben
  347.     wird, haben die BGR-Umgebungslicht-Werte der einzelnen Objekte
  348.     keine Wirkung mehr (müssen aber trotzdem definiert werden). Ein
  349.     annehmbarer Anfangswert für FAKTOR liegt zwischen 0.1 und 0.2.
  350.  
  351.  
  352.                              Antialiasing
  353.                              ~~~~~~~~~~~~
  354. A ANZAHL THRESHHOLD
  355.     Beim default-Wert (1,1.0) berechnet der Ray-Tracer für jeden Pixel
  356.     des Bildes genau einen (Licht-)Strahl (ein 320x400 Pixel großes Bild
  357.     ergibt also ca. 128000 Strahlen). Desöfteren entstehen bei digitaler
  358.     Generierung eines Bildes mit nur einem Strahl unangenehme Nebeneffekte.
  359.     So werden zum Beispiel diagonale Linien als abgesetzte Treppenstufen
  360.     dargestellt -- diese fürchterlichen Zacken! Solche falschen Erschei-
  361.     nungen werden 'Aliasing Effekt' genannt. Es wurden vielerlei Tech-
  362.     niken erfunden, um die Auswirkungen dieses Effekts zu reduzieren,
  363.     die sich alle auf Anti-Aliasing beziehen (es gibt noch viele andere
  364.     Arten von Aliasing-Effekten neben Zacken. Ein weiteres Beispiel sind
  365.     die messerscharfen Schatten, die man traditionellerweise in Computer-
  366.     Bildern findet -- reale Schatten sind immer ein bißchen verschwommen).
  367.       Die ANZAHL gibt an, wieviel Strahlen pro Pixel verfolgt werden; 
  368.     je mehr, desto besser, aber desto langsamer geht's. Ein guter Start-
  369.     Wert ist 4. Es wird dann ein Bündel von vier Strahlen zufällig in
  370.     den 'Pixel-Kegel' geschickt, die über die horizontale und vertikale
  371.     Dimension verteilt (distributed) sind; daher sagt man, daß dieser
  372.     Ray-Tracer 'Distributed Ray Tracing' beherrscht.
  373.       Der THRESHHOLD-Wert bezieht sich auf eine etwas kompliziertere
  374.     Eigenschaft des Ray-Tracers, genannt 'Statistically Optimized Distri-
  375.     buted Ray Tracing' (statistisch optimierte verteilte Strahlen-Verfol-
  376.     gung). Das geht so vor sich, daß das Programm die Stärke der ein-
  377.     zelnen Strahlen des Bündels berechnet, die auf den Pixel 'verteilt'
  378.     werden; also die statistische Abweichung der z.B. vier Intensitäten.
  379.     Wenn die Abweichung klein ist, ist es wahrscheinlich, daß dies eine
  380.     glatte Stelle im Bild ist.
  381.     Es wird also eine gute Annäherung an die Original-Intensität des
  382.     Pixels erreicht. Aber angenommen, der Pixel befindet sich gerade an
  383.     einer diagonalen Kante, so werden einige der Strahlen auf die eine
  384.     Fläche geworfen und einige auf die andere. Die Abweichung wird also
  385.     groß sein. Das Programm beachtet dies, und wenn die Abweichung den
  386.     THRESHHOLD-Wert überschreitet, 'verteilt' es eine weitere Gruppe von
  387.     (in diesem Fall) vier Strahlen auf den Pixel. Nun wird die Intensi-
  388.     täts-Abweichung der acht Strahlen errechnet und der Vorgang wieder-
  389.     holt, bis entweder die gewünschte Glätte, oder die beliebig einge-
  390.     stellte maximale ANZAHL Strahlen erreicht ist. THRESHHOLD-Werte
  391.     größer oder gleich 1.0 bewirken keine extra Bündel außer dem mit
  392.     ANZAHL angegebenen. Sinnvolle Werte für THRESHHOLD liegen im Bereich
  393.     von 0.0001 bis 0.1.
  394.  
  395.  
  396.                     Tiefenschärfe und Blende der Kamera
  397.                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  398. F BLENDE ENTFERNUNG
  399.     Wenn dieses Kommando weggelassen wird, werden alle Objekte perfekt
  400.     Scharf abgebildet. Mit ihm kann man aber nun Tiefenschärfe-Effekte
  401.     erzielen (was die Rechenzeit wiederum erheblich steigert!).
  402.     Die BLENDE bestimmt die Größe der Kameralinse. Sie hängt wie auch die
  403.     ENTFERNUNG vom verwendeten Koordinatensystem ab; aber vorausgesetzt
  404.     eine Einheit steht für einen Zentimeter und die ENTFERNUNG beträgt
  405.     100 Einheiten, dann sollte sich BLENDE zwischen 0.5 und 2.0 bewegen.
  406.       Um einen sanften Verlauf von Vordergrund zu Hintergrund zu er-
  407.     reichen, muß man den Anti-Aliasing Parameter (A-Kommando) ANZAHL auf,
  408.     sagen wir, 20 bis 30 und THRESHHOLD auf 1.0 setzen.
  409.  
  410.  
  411.                         Generell diffuses Licht
  412.                         ~~~~~~~~~~~~~~~~~~~~~~~
  413. M ANZAHL ZÄHLER NENNER
  414.     Dieser Befehl bezieht sich auf die realistische Ausbreitung des Lichts,
  415.     wenn es von Objekt zu Objekt reflektiert wird. Üblicherweise werden bei
  416.     einer computerberechneten Beleuchtung die Oberflächen der Objekte ent-
  417.     sprechend ihrer Farbe, ihres Materials und der Stärke des Lichts ein-
  418.     gefärbt. Die Teile, die nicht direkt im Licht liegen werden schwarz
  419.     gezeichnet. Nun, das sieht sehr künstlich aus und deshalb wird den
  420.     schattigen Bereichen ein konstanter Farbwert zugeordnet (hier mit dem
  421.     'a'-Kommando bzw. dem individuellen Umgebungslicht(s.u.)).
  422.       In der Realität gibt es aber auch im Schatten Licht, das von anderen
  423.     Gegenständen reflektiert wird. Dazu dient der 'M'-Befehl (leider erhöht
  424.     sich dadurch die Rechenzeit wieder einmal mehr). Das Programm sammelt
  425.     nun für jeden Pixel weitere zufällige Strahlen, um zu ergründen, was
  426.     in der näheren Umgebung noch als Reflektor arbeitet. Die ANZAHL be-
  427.     stimmt dabei, vieviel Strahlen hinzugenommen werden. Werte von 10 an
  428.     aufwärts sind möglich; bei 100 und mehr erhält man weiche Farbverläufe.
  429.       ZÄHLER UND NENNER haben mit der rekursiven Natur des Ray-Tracings
  430.     zu tun: angenommen, ein Strahl wird berechnet, der auf die dargestellte
  431.     Oberfläche fällt und dabei auch die benachbarte Fläche berührt. Von
  432.     dieser Fläche wird nun auch ein Strahlenbündel genommen, um ihre Farbe
  433.     zu berechnen usw. Dabei schwillt die Anzahl der Strahlen exponentiell
  434.     an. Um das zu verhindern, wird für jede Rekursion die Anzahl der
  435.     Strahlen auf einen Bruchteil von ANZAHL gesetzt. Dieser Bruch wird
  436.     mit ZÄHLER und NENNER angegeben und sollte bei bei 1/3 bis 1/4 liegen.
  437.  
  438.  
  439.                            Start- und End-Zeile
  440.                            ~~~~~~~~~~~~~~~~~~~~
  441. & START ENDE
  442.     Wird der Befehl weggelassen, wird ein komplettes Bild mit 320x400
  443.     Pixel errechnet. Das Programm geht von Zeile START bis ENDE-1. Man
  444.     kann komplexere Szenen auch in Stücken rechnen und mit RAY2 nachher
  445.     zusammenmischen.
  446.  
  447.  
  448.                              Hintergrund-Farbe
  449.                              ~~~~~~~~~~~~~~~~~
  450. b BLAU GRüN ROT
  451.     Einfach die drei Farbwerte für den Hintergrund.
  452.  
  453.  
  454.                               Wellenstruktur
  455.                               ~~~~~~~~~~~~~~
  456. w ZENTRUM-X Y Z  WELLENLÄNGE AMPLITUDE DÄMPFUNG PHASE
  457.     Einige Parameter des Programms benutzen Wellenformen als Basis für
  458.     ihre Effekte (am auffälligsten bei geriffelten Oberflächen,z.B.Wasser).
  459.     Man kann bis zu 100 Wellenformen pro Szene definieren wobei das Pro-
  460.     gramm eine Wellenform-Tabelle anlegt, auf die die jeweiligen Befehle
  461.     zugreifen. Die ersten drei Zahlen (ZENTRUM-X Y Z) legen die Mitte der
  462.     konzentrischen Welle fest. WELLENLÄNGE ist die Strecke von einem
  463.     Wellenberg zum nächsten. AMPLITUNDE gibt die Höhe der Welle durch
  464.     einen Wert zwischen 0.1 (flach) und 0.5 (hoch) an. Mit DÄMPFUNG stellt
  465.     man die Abnahme der Höhe bei Entfernung vom Mittelpunkt ein. 1.0 be-
  466.     deutet: keine Dämpfung; bei 0.7 beträgt die Höhe der folgenden Welle
  467.     70% der vorhergehenden. PHASE bestimmt die Starthöhe der Welle. Die
  468.     Werte gehen von 0.0 (Wellenberg) über 0.5 (Tal) bis 1.0 (Berg). Das
  469.     kann bei Bildsequenzen bewegtes Wasser simulieren.
  470.  
  471.  
  472.                               Farbverläufe
  473.                               ~~~~~~~~~~~~
  474. g FARBE-BLAU GRüN ROT  START BEREICH
  475.     Normal hat ein Objekt von oben bis unten die gleiche Farbe. Mit diesem
  476.     Kommando aber kann man einen Verlauf der Farbe in Richtung der Y-Achse
  477.     programmieren. Bis zu 10 solcher Verläufe sind möglich.
  478.     FARBE-BLAU GRÜN ROT bestimmt die Farbe, zu der die Grundfarbe des Ob-
  479.     jekts (angegeben unten bei 'diffuses Objektlicht') hin verläuft. START
  480.     definiert die Y-Koordinate, bei der diese überblendung beginnen soll.
  481.     Alle Punkte darunter werden in der Grundfarbe des Objekts gemalt.
  482.     BEREICH gibt die Y-Einheiten an, über die sich der Verlauf erstreckt.
  483.     Alle Punkte oberhalb START+BEREICH werden in der mit FARBE-B G R
  484.     bestimmten Farbe gemalt.
  485.  
  486.  
  487.                                Schneefall
  488.                                ~~~~~~~~~~
  489. n START BEREICH FAKTOR THRESHHOLD
  490.     Diese Oberflächenstruktur ist den Farbverläufen sehr ähnlich (und
  491.     außerdem noch in Arbeit). Sie ist hauptsächlich für die unten be-
  492.     schriebenen Fractalen Gebilde gedacht, um sozusagen Schnee darauf
  493.     zu verteilen; und zwar je höher, desto mehr.
  494.     START ist die Y-Koordinate, ab der überhaupt Schnee liegt. BEREICH
  495.     gibt die Höhe des schneebedeckten Feldes an. Der Teil oberhalb
  496.     von START+BEREICH ist ganz bedeckt. FAKTOR ist ein Regler, um die
  497.     Stärke des 'Schneefalls' in Abhängigkeit von der Höhe zu setzen.
  498.     Bei 0.0 findet keine Beeinflussung statt. Werte über 1.0 resultieren
  499.     in einem schnelleren Aufbau der Schneedecke schon am unteren Rand von
  500.     BEREICH (?;siehe Beispiel 'island.dat'). Mit THRESHHOLD läßt sich eine
  501.     Beziehung zwischen Höhe, Steigung und Schneedecke herstellen. Bei 0.0
  502.     wird alles ab START ganz bedeckt sein; bei Werten zwischen 0.0 und 1.0
  503.     resultiert die Schneedecke aus einer Funktion aus Steigung und Höhe.
  504.     Bei THRESHHOLD 0.4 wird die Oberfläche ab etwa 40 Grad Steigung zuneh-
  505.     end mit Schnee bedeckt.
  506.  
  507.  
  508.                           3D-Schachbrett-Muster
  509.                           ~~~~~~~~~~~~~~~~~~~~~
  510. k FARBE-BLAU GRÜN ROT  X Y Z  JUNK1 JUNK2 JUNK3
  511.     Bis zu 10 Schachbrettmuster können definiert werden. Sie können 1-
  512.     (Schichten), 2- (Schachbrett,Spalten) oder 3-dimensional (Würfel)
  513.     sein. Aufgrund der Farbe eines Oberflächenpunktes bestimmt diese
  514.     Funktion, ob der Punkt die Originalfarbe des Objekts, oder die mit
  515.     FARBE-BLAU GRüN ROT angegebene Farbe bekommt. Um festzusetzen, wel-
  516.     cher Punkt in welcher Farbregion liegt, gibt es die X Y Z -Parameter.
  517.     X definiert die Breite, Y die Höhe und Z die Tiefe der aufeinander
  518.     folgenden Schichten. Beachtet, das ein oder mehrere dieser Parameter
  519.     auf 0 gesetzt werden können, um die Dimensionalität zu beschränken.
  520.     Wenn z.B. Y=0 ist ergeben sich waagerechte Schichten abwechselnder
  521.     Farbe. Wenn alle drei ungleich 0 sind und unterschiedliche Werte
  522.     haben, entsteht ein 3-dimensionales Blockmuster.
  523.     Die JUNKs werden in dieser Version noch nicht benutzt und sollten
  524.     auf 0 gesetzt werden.
  525.  
  526.  
  527.                     genereller Dunst-Faktor (Vergrauung)
  528.                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  529. H FARBE-BLAU GRÜN ROT  ENTFERNUNG
  530.     Ohne diesen Befehl ist die Farbe einer dargestellten Oberfläche unab-
  531.     hängig von der Entfernung zum Betrachter. Bei Benutzung des Dunst-
  532.     Faktors kan man den Ray-Tracer veranlassen, die Farben der weiter
  533.     entfernten Objekte kontinuierlich zu der (mit FARBE-B G R) angegebenen
  534.     Farbe fließen zu lassen (natürlicherweise ein bläuliches Grau). Alle
  535.     Punkte, die weiter, als ENTFERNUNG vom Kameraauge weg sind, werden in
  536.     der Dunst-Farbe gemalt, und sind somit unsichtbar.
  537.  
  538.  
  539.                             Fractal-Strukturen
  540.                             ~~~~~~~~~~~~~~~~~~
  541. f WIEDERHOLUNGEN  VERHÄLTNISS-X Y Z  OBERFLÄCHE
  542.     Diese Struktur kann nur für Fractal-Objekte (s.u. bei 'x'-Kommando)
  543.     benutzt werden. Bis jetzt kann der Ray-Tracer nur eine kleine Anzahl
  544.     primitiver Formen bilden, wovon eines das Dreieck ist. Wie beim
  545.     'x'-Kommando weiter unten beschrieben, hat er aber die Fähigkeit,
  546.     komplexe Gebilde zu errechnen, die aus vielen, zusammemhängenden
  547.     Dreiecken bestehen und 'Stochastische Flächen' genannt werden (oft
  548.     als fraktale Flächen bezeichnet, obwohl der Zusammenhang zur Mathe-
  549.     matik der Fractals begrenzt ist). Dieser Befehl definiert die Para-
  550.     meter, die der Ray-Tracer für die Konstruktion des Dreiecks-Netzes
  551.     braucht.
  552.       Um eines von 10 möglichen Fractals definieren zu können, benötigt
  553.     man mindestens eine Wellenform ('w'-Kommando). Der Vorgang einer
  554.     Fractal-Erzeugung basiert auf wiederholter Dreiecks-Teilung, unter
  555.     Verwendung von komplexen Koordinaten-Verschiebungen bei der Bestimmung
  556.     der Scheitelpunkte des geteilten Dreiecks. Man beginnt mit einem Haupt-
  557.     Dreieck, das die ungefähre Größe und Lage des Objekts angibt ('x'-Kom.).
  558.     Das Originaldreieck wird durch Halbierung der Seiten in vier kleinere
  559.     Dreiecke geteilt, wobei die Ecken der neuen Dreiecke im Raum ver-
  560.     schoben werden. WIEDERHOLUNGEN gibt an, wie oft die Teilung ausgeführt
  561.     wird. Je größer diese Tiefe, desto feiner wird die fraktale Oberfläche,
  562.     aber die Rechenzeit geht wieder 'mal hoch. Außerdem brauchen größere
  563.     Werte große Mengen an Speicher, da die Daten der generierten Dreiecke
  564.     dort abgelegt werden (bei einem Wert von '7' z.B. tausende von 512-Byte
  565.     Speicherseiten, also seid vorsichtig!).
  566.       Die drei Parameter VERHÄLTNISS-X Y Z erlauben es, die Verzerrung in
  567.     eine bestimmte Richtung zu lenken (bei X=1 und Z=1 und Y=3.0 entsteht
  568.     z.B. ein dreimal höher als breites Fractal-Gebilde). Bei VERHÄLTNISSen
  569.     gleich 0 werden keine Höhenabweichungen in der jeweiligen Richtung aus-
  570.     geführt (Wenn alle drei 0 sind, sieht man ein flaches Dreieck von oben).
  571.       OBERFLÄCHE bestimmt eine Struktur für das komplette Fractal (die
  572.     Werte entnimmt man den unten aufgeführten Objekt-Strukturen).
  573.       Wie oben erwähnt, braucht man für eine bewegte Fractal-Oberfläche
  574.     ein paar Wellenformen. Ein guter Anfang sind 5 oder 6, deren Ausgangs-
  575.     punkte über die ganze Szene verstreut sein sollten. Unterschiedliche
  576.     Wellenlängen und Amplituden verstärken die Verzerrung des Fractals.
  577.     Die Wellen-DÄMPFUNG sollte gering sein (um 1.0). Die genaue Art und
  578.     Weise, wie die Wellen auf das Fractal wirken, liegt jenseits jeder
  579.     vernünftigen Beschreibung; es genügt zu sagen, daß kein Zufall im Spiel
  580.     ist, und verschiedene Wellenformen ergeben ausgesprochen unterschied-
  581.     liche Formen; experimentiert !((und wartet...))
  582.  
  583.  
  584.                             Murmel-Strukturen
  585.                             ~~~~~~~~~~~~~~~~~
  586. m INBLAU INGRüN INROT  XMAß TURBULENZ DICKE
  587.     Man kann bis zu 10 Murmel-Strukturen definieren. Hier benötigt man
  588.     ebenfalls mindestens eine Wellenform.
  589.       Murmeln bestehen aus einem Basismaterial und Einschlüssen aus einem
  590.     anderen Stoff. Die Grundfarbe wird durch die Angabe bei 'diffuse Re-
  591.     flexion' (s.u.) festgelegt. Die Farbe der Einschlüsse wird durch
  592.     INBLAU INGRüN und INROT bestimmt. Die resultierende Farbe ist ein
  593.     komplexer Verlauf der beiden Materialfarben.
  594.       Es werden ein paar Schichten entlang der X-Achse, zunächst alle an
  595.     derselben Stelle, positioniert. Ihre Breite wird mit XMAß angegeben
  596.     (Werte von 0.1 bis 1.0). Dann wird die TURBULENZ hinzugefügt, um die
  597.     Schichten in unzählige Windungen und Streifen zu verwandeln. Werte
  598.     zwischen 1.0 und 3.0 sind ganz hübsch. Die grobe DICKE der Streifen
  599.     wird mit einem Integer (ganze Zahl) angegeben, wobei '1' normale, '2'
  600.     halbe, '3' ein viertel der Dicke usw. ergibt.
  601.       Die Turbulenz  wiederum wird von den definierten Wellenformen beein-
  602.     flusst. Die Beziehung zwischen einer bestimmten Wellenform und der
  603.     resultierenden Turbulenz ist unmöglich vorherzusagen. Alles was getan
  604.     werden kann, ist, grobe Richtlinien für die Parameterwerte zu geben.
  605.     Zunächst werden 4 oder 5 Wellenformen benötigt. Die Zentren sollten
  606.     gut über die ganze Szene verteilt sein. Die Wellenlängen sollten stark
  607.     variieren (manche vier und fünfmal so lang sein, wie andere). Dämpfung
  608.     sollte keine eingestellt sein (0.95-1.0).
  609.  
  610.  
  611.                             Holz-Strukturen
  612.                             ~~~~~~~~~~~~~~~
  613. d BLAU GRÜN ROT  STÄRKE RINGMAß TURBULENZ DICKE
  614.     Wieder sind 10 Holz-Strukturen pro Szene möglich. Wieder muß mindes-
  615.     tens eine Wellenform definiert sein. Die Holz-Struktur wird ganz
  616.     ähnlich, wie die Murmel-Struktur erzeugt, außer, daß das Holz nicht
  617.     aus Schichten aufgebaut wird, sondern aus konzentrischen Röhren des
  618.     Basismaterials entlang der Y-Achse. RINGMAß entspricht dem XMAß bei
  619.     den Murmeln, ebenso verhalten sich TUBULENZ und DICKE. STÄRKE kon-
  620.     trolliert, wie stark oder schwach die Maserung ausgebildet wird.
  621.     Werte über 1.0 verstärken die Maserung, Werte unter 1.0 dämpfen sie.
  622.  
  623.  
  624.                      Kameraposition und Blickrichtung
  625.                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  626. e XPOS YPOS ZPOS  XBLICK YBLICK ZBLICK  XUP YUP ZUP
  627.     Die ersten drei Zahlen setzen die Position der imaginären Kamera. Die
  628.     nächsten drei bestimmen die Richtung relativ zu diesem Punkt und
  629.     definieren, was zu sehen ist. Die Länge dieses Vektors bewirkt einen
  630.     'Tele/Weitwinkel-Effekt', wobei der Bildschirm an seiner Spitze mit
  631.     einem Verhältnis von 256 zu 170 Einheiten dargestellt wird. Kamera-
  632.     position und die Länge des Blickrichtungs-Vektors sind also eng mit-
  633.     einander verknüpft und bilden zusammen den Blickwinkel (oder -Kegel).
  634.     Die letzten drei Parameter geben eine Höhe an, um die der Blickpunkt
  635.     heraufgesetzt wird; normalerweise wird man mit 0 1 0 hinkommen.
  636.  
  637.  
  638.                             Paralleles Licht
  639.                             ~~~~~~~~~~~~~~~~
  640. l BLAU GRÜN ROT  XRICHT YRICHT ZRICHT
  641.     Die ersten drei Parameter stehen für die Farbe bzw. Intensität der
  642.     Lichtquelle (1.0 1.0 1.0 entspricht Weiss, 0.5 0.5 0.5 ist dunkles
  643.     lila). Die restlichen drei Werte geben die Richtung an, aus der das
  644.     Licht kommt. Bei '1 0 0' z.B. negativ entlang der X-Achse. Man kann
  645.     maximal 100 Lichtquellen definieren; aber viele Lichter verlaaaaaa-
  646.     aaangsamen die Sache nocheinmal. Zwei sind vertretbar.
  647.  
  648.  
  649.                            Kugelförmiges Licht
  650.                            ~~~~~~~~~~~~~~~~~~~
  651. L BLAU GRüN ROT  ZENTRUM-X Y Z  AUSBREITUNG RADIUS
  652.     Das erste Zahlentripel entspricht dem bei parallelem Licht. Die drei
  653.     nächsten Daten bestimmen die Position des Mittelpunktes, der über-
  654.     all inner- oder außerhalb des sichtbaren Bereichs liegen kann. Be-
  655.     achtet aber, daß die Lichtquelle selbst nie sichtbar ist! Wenn man
  656.     also z.B. eine Glühbirne will, muß man auf die gleichen Koordinaten
  657.     eine durchsichtige Kugel mit dem gleichen Radius setzen. Die AUS-
  658.     BREITUNG gehorcht dem umgekehrten quadratischen Gesetz, nach dem
  659.     die Helligkeit innerhalb der Szene vermindert wird. Um zu verdeut-
  660.     lichen, wie man einen Wert für AUSBREITUNG findet, hier ein Beispiel:
  661.     Angenommen, man will mit einer Glühbirne bei vollem Licht (1 1 1)
  662.     einen Tisch im Abstand von z.B. 37 Einheiten gut ausleuchten, so
  663.     setzt man AUSBREITUNG auf eben diese 37 Einheiten. Dann werden Gegen-
  664.     stände, die näher beim Licht liegen überbelichtet und diejenigen, die
  665.     weiter weg sind als 37 Einheiten, werden immer schwächer beleuchtet.
  666.     RADIUS bestimmt den Licht aussendenden Kreis, der bei '0' punktförmig
  667.     ist, was wesentlich schneller zu berechnen ist. Außerdem sollte man
  668.     bei größeren Radien den Antialiasing-Faktor ('A'-Kommand) hochsetzen,
  669.     da diese viele Halbschatten erzeugen.
  670.  
  671.  
  672. Nun endlich zur Definition der einzelnen Objekte. Das können bis zu 1000
  673. pro Szene sein ! Alle Objekte verfügen über die selben grundlegenden
  674. Parameter. Genauer gesagt beginnt jede Objekt-Definition mit folgenden
  675. Angaben ('*' steht für das jeweilige Objekt-Kommando (s,q,x,t,r)):
  676.  
  677. * STRUKT FUZZ SPIEGEL INDEX  TRANSP-B G R  UMLICHT-B G R  DIFREFL-B G R
  678.  
  679.     STRUKT ist ein Integerwert, der dem Objekt eine gewünschte (und defi-
  680.         nierte) Oberflächen-Struktur zuordnet. '0' bewirkt eine glatte,
  681.         einheitlich gefärbte Oberfläche. Positive Werte kann man aus
  682.         folgenden Struktur-Funktionen auswählen :
  683.  
  684.        WERT     STRUKTUR-FUNKTION
  685.       ------   -------------------
  686.         1:      Farbverlauf in Y-Richtung
  687.                 Angefangen bei Y=0, verläuft die Farbe von rot über blau
  688.                 zu grün und zurück nach rot bei Y=20. Dies wiederholt sich
  689.                 alle 20 Y-Einheiten.
  690.  
  691.         3:      Gesprenkeltes Wirrwarr
  692.                 Die Helligkeit der Objekt-Oberfläche wird von einem ge-
  693.                 sprenkelten Muster variiert. Diese Struktur benötigt
  694.                 einige definierte Wellenformen.
  695.  
  696.         4:      Wellige Oberfläche
  697.                 Das sieht wie gekräuselte Wellen aus und wenn Reflektion
  698.                 gesetzt ist, werden die Spiegelungen geriffelt.
  699.  
  700.         5:      Backsteinmuster
  701.                 Hier wird das Objekt wie eine Backsteinmauer dargestellt.
  702.                 Die Steingröße ist festgelegt auf Höhe=3.0, Breite=4.0
  703.                 und Länge=8.0; die Mörteldicke beträgt 0.5. Die Farbe der
  704.                 Steine wird durch die 'diffuse Reflektion' des Objekts be-
  705.                 stimmt; die Farbe des Mörtels ist Blau=0.8, Grün=0.85 und
  706.                 Rot=0.99. Die Backsteine liegen entlang der Koordinaten-
  707.                 Achsen.
  708.  
  709.       10...19:  Einzelne Welle
  710.                 Wie Struktur 4, nur daß die Oberfläche von nur einer Welle
  711.                 beeinflußt wird. Nummer 10 ist die erste definierte Welle,
  712.                 Nummer 11 die zweite usw. bis zur zehnten (Nr.19).
  713.  
  714.       20...29:  Murmel
  715.                 20 benutzt die erste Murmeldefinition usw. (1-10).
  716.  
  717.       40...49:  Holz-Maserung
  718.                 Nimmt entsprechend die definierten Holz-Strukturen (1-10).
  719.  
  720.       50...59:  Schachbrett
  721.                 Weist die beschriebenen Schachbrettmuster zu (1-10).
  722.  
  723.       60...69:  Fractal-Struktur
  724.                 Das ist eigentlich keine Oberflächenstruktur an sich (in-
  725.                 sofern, als hier keine Farbänderung stattfindet). Sie kann
  726.                 nur bei Fraktalen Objekten ('x'-Kommando) verwendet werden
  727.                 und ordnet dem Objekt die gewünschte Fraktal-Struktur zu.
  728.  
  729.       70...79:  Weicher Farbverlauf
  730.                 Verwendet einen der definierten Farbverläufe (1-10).
  731.  
  732.       80...89:  Schnee
  733.                 80 ist die erste angegebene Schneefall-Struktur, 81 die
  734.                 zweite usw. wie bei allen anderen auch bis zur zehnten=89.
  735.  
  736.  
  737.     FUZZ (wörtlich 'Fussel') ist eine Pseudo-Struktur-Wert von 0.0 bis
  738.        1.0, der die Oberfläche mit einen Zufalls-'Flaum' überzieht. Das
  739.        kann verwendet werden, um weiche Oberflächen, ähnlich Tennisbäl-
  740.        len, alte, verschleierte Spiegel, geätztes Glas oder Änliches
  741.        darzustellen.
  742.  
  743.     SPIEGEL ist ein Wert von 0.0 bis 1.0, wobei '0.0' keine spektralen
  744.        oder spiegelnden Reflektionen hervorruft, und '1.0' gleich 100%
  745.        spiegelnd bedeutet.
  746.  
  747.     INDEX ist der Index der Lichtbrechung des Objekts. Er wirkt aber nur
  748.        bei durchsichtigen Objekten (um 1.0).
  749.  
  750.     TRANSP-B, -G, -R  bestimmen die Transparenz des Objekts für jede
  751.        Farbe getrennt. Bei '1.0 1.0 1.0' ist es ganz durchsichtig.
  752.  
  753.     UMLICHT-B, -G, -R sind Werte für das Umgebungslicht (Helligkeit im
  754.        Schatten). Bei '1.0 1.0 1.0' bestitzt der Gegenstand sehr STARKES
  755.        Umgebungslicht, was die Farben aber auch stark auswäscht.
  756.  
  757.     DIFREFL-B, -G, -R legt nun endlich die eigentliche Farbe des Objektes
  758.        fest (natürlich in Abhängigkeit von den gewählten Lichtquellen...)
  759.        und nennt sich 'diffuse Reflektion'. Glas hat zum Beispiel über-
  760.        haupt keine diffuse Reflektion während Kalk fast die Werte '1 1 1'
  761.        erhalten müßte.
  762.  
  763. Man beachte, daß auch irrationale Objekte, z.B. mit 100% Spiegelung und
  764. 100% Transparenz, kreiert werden können.
  765.  
  766. Nun zu den einzelnen Objekt-Befehlen. Ihre Parameter FOLGEN (stehen rechts
  767. von) den anderen, zuvor aufgeführten Werten ! Zum Beispiel:
  768. s strukt fuzz spieg ind trans-BGR uml-BGR difr-BGR  ZENTRUM-X Y Z RADIUS
  769. -                                                    --------------------
  770.  
  771.     Kugel:
  772.     ~~~~~~
  773. s ... ZENTRUM-X Y Z  RADIUS
  774.     Erklärt sich selbst.
  775.  
  776.     Parallelogramm:
  777.     ~~~~~~~~~~~~~~~
  778. q ... POSX POSY POSZ  VL-X VL-Y VL-Z  VR-X VR-Y VR-Z
  779.     Mit POS-X Y Z setzt man eine Ecke des Vierecks irgendwo ins Koordina-
  780.     tensystem. Die folgenden beiden Zahlentripel sind zwei Vektoren, die
  781.     zwei Seiten des Parallelogramms relativ zu diesem Eckpunkt bestimmen.
  782.     Und nun das schwierige daran: auf die Anordnung dieser beiden Vektoren
  783.     kommt's an. Um es einfach zu sagen: VL ist von 'oben' gesehen der
  784.     linke und VR der rechte Vektor. Andersherum wird das Objekt unsicht-
  785.     bar (der Autor empfiehlt allerdings, damit zu experimentieren). Die
  786.     Vektoren müssen natürlich nicht rechtwinklig zueinander stehen.
  787.  
  788.     Dreieck
  789.     ~~~~~~~
  790. t ... POSX POSY POSZ  VL-X VL-Y VL-Z  VR-X VR-Y VR-Z
  791.     Das selbe wie beim Parallelogramm.
  792.  
  793.     FRACTAL:
  794.     ~~~~~~~~
  795. x ... POSX POSY POSZ  POS1X POS1Y POS1Z  POS2X POS2Y POS2Z
  796.     Es wird ebenfalls ein Dreieck konstruiert, wobei die drei Eckpunkte
  797.     - im Gegensatz zum einfachen Dreieck - jedoch absolut anzugeben sind.
  798.  
  799.     RING:
  800.     ~~~~~
  801. r ... ZENTRUM-X Y Z  VL-X VL-Y VL-Z  VR-X VR-Y VR-Z  MINRAD MAXRAD
  802.     Ringe sind eine Art Parallelogramm. Die beiden Vektoren müssen hier
  803.     aber rechtwinklig zueinander stehen und bestimmen lediglich die
  804.     Fläche, in der der Ring mit dem Mittelpunkt ZENTRUM, dem Innenradius
  805.     MINRAD und dem Außenradius MAXRAD liegt. Bei MINRAD=0 entsteht eine
  806.     flache Scheibe.
  807.  
  808. Zeilen mit { und } können beliebige Kommandos umschließen und so zusam-
  809. menfassen. Dies erlaubt dem Programm durch die Berechnung erweiterter
  810. Bereiche um die beschriebenen einfachen Objekte herum und Prüfung der
  811. Strahlen-Schnittpunkte optimiertes Ray-Tracing zu betreiben, was schneller
  812. ist, als die einzelne Berechnung der eingeschlossenen Objekte. Solche
  813. Erweiterungen können auch geschachtelt werden.
  814.  
  815.  
  816. QUELLCODE-INFOS:
  817. ~~~~~~~~~~~~~~~~
  818. Jedes Programm hat sein eigenes Quellcode-Directory:
  819.  
  820.       ray_source/
  821.              makefile
  822.              ray.h    - alle globalen Definitionen
  823.              ray.c    - Haupt-Modul des Ray-Tracers
  824.              val.c    - momentane Farbintensität eines Objekts
  825.              hit.c    - berechnet, ob ein Strahl auf ein Objekt trifft
  826.              tex.c    - berechnet die Struktur eines Objekts
  827.              ext.c    - behandelt die {,}-Erweiterungen
  828.              rnd.c    - Zufallszahlen-Tabelle
  829.              mth.c    - führt Vektor- und Matrix-Berechnungen aus
  830.              fil.c    - Disk-I/O Routienen
  831.              int.c    - findet Strahlen/Objekt-Schnittpunkte
  832.              cal.c    - oberste Objekte-Berechnungen
  833.       ray2_source/
  834.              makefile
  835.              ray2.c   - Quellcode des Post-Prozessors
  836.       display_source/
  837.              makefile
  838.              display.c - Quellcode des DISPLAY-Programms
  839.  
  840.  
  841. Nun versucht mal Euer Glück ! Ich wünsche Euch jedenfalls
  842.  
  843.        viel Vergnügen      und      much fun !!!
  844.  
  845.  
  846.